﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Globalization;
using System.Linq;
using _1.Presentacion.Utilidades;
using Microsoft.VisualBasic;
using System.Windows.Forms;
using _4.Modelado.Inventario;
using _2.Logica.Inventario;
using _1.Presentacion.Principal;

namespace _1.Presentacion.Modulo_Inventario
{
    public partial class Gestionar_Articulo : Päntalla_Base
    {
        private int PKArticulo;

        public Gestionar_Articulo()
        {
            InitializeComponent();
        }

        private void guardarArticulo()
        {
            var obj = new Articulo();

            obj.dArticuloCosto = Convert.ToDecimal(txtCosto.Text);
            obj.sArticuloNombre = txtNombre.Text;
            obj.bArticuloEstado = chbEstado.Checked;
            obj.iFK_Linea_Articulo = Convert.ToInt32(cbxLineaArticulo.SelectedValue);
            obj.iFK_UMedida_Articulo = Convert.ToInt32(cbxUnidadMedida.SelectedValue);
            obj.iPK_Articulo = PKArticulo;

            var logica = new ArticuloL();

            logica.ArticuloGuardar(obj);
            MessageBox.Show("El registro ha sido guardado exitosamente", "Transacción", MessageBoxButtons.OK, MessageBoxIcon.Information);
            CargaGridArticulo();
            P_Limpiar();
        }

        private bool flag = false;
        private void Gestionar_Articulo_Load(object sender, EventArgs e)
        {
            flag = false;
            Validaciones.CargarUsuarioLogueado(lbl_Usuario, lbl_Fecha);
            CargaGridArticulo();
            CargaComboUnidadesMedida();
            CargaComboLineaArticulo();
           
            CargaComboBodegas();
           
            

        }

        private void P_Limpiar()
        {
            txtCosto.Text = "0";

            txtNombre.Clear();
            txtPKArticulo.Clear();

            cbxLineaArticulo.SelectedIndex = cbxUnidadMedida.SelectedIndex = 0;
        }

        #region Articulos
      
        private void btnNuevo_Click(object sender, EventArgs e)
        {
            P_Limpiar();
        }
       
        private void btnGuardar_Click(object sender, EventArgs e)
        {
            try
            {
                if (Information.IsNumeric(txtCosto.Text))
                {
                    int indiceFila = dgvArticulo.SelectedCells[0].RowIndex;
                    if(chbEstado.Checked)
                    {
                        guardarArticulo(); 
                           
                    }
                    else if (Convert.ToInt32(dgvArticulo.Rows[indiceFila].Cells[6].Value) > 0)
                            {

                                MessageBox.Show("El artículo no se puede inactivar, tiene existencias registradas", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                            }
                            else
                            {
                                guardarArticulo();   
                            }

                }
                else
                {
                    MessageBox.Show("Debe ingresar una cantidad válida", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    txtCosto.Focus();
                    txtCosto.Clear();
                }

            }
            catch (Exception exc)
            {
                MessageBox.Show("Se produjo un error al guardar los datos" + exc, "Error", MessageBoxButtons.OK);
            }

        }
       
        private void dgvArticulo_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            int indicefila = dgvArticulo.SelectedCells[0].RowIndex;
            txtPKArticulo.Text = dgvArticulo.Rows[indicefila].Cells[0].Value.ToString();
            txtNombre.Text = dgvArticulo.Rows[indicefila].Cells[1].Value.ToString();
            txtCosto.Text = dgvArticulo.Rows[indicefila].Cells[2].Value.ToString();
            //txtExitencia.Text = dgvArticulo.Rows[indicefila].Cells[6].Value.ToString();
            chbEstado.Checked = Convert.ToBoolean(dgvArticulo.Rows[indicefila].Cells[3].Value);
            cbxUnidadMedida.SelectedValue = dgvArticulo[5, indicefila].Value.ToString();
            cbxLineaArticulo.SelectedValue = dgvArticulo[4, indicefila].Value.ToString();

            txtNombre.Focus();
            PKArticulo = Convert.ToInt32(dgvArticulo.Rows[indicefila].Cells[0].Value.ToString());
        }
        private void btnEliminar_Click(object sender, EventArgs e)
        {
            try
            {
                if (dgvArticulo.RowCount > 0)
                {
                    int indiceFila = dgvArticulo.SelectedCells[0].RowIndex;
                    string sDescripcion = dgvArticulo[1, indiceFila].Value.ToString();
                    decimal dExistencia = Convert.ToDecimal(dgvArticulo[6, indiceFila].Value.ToString());
          
                    #region Elimina Articulo

                    DialogResult r = MessageBox.Show("Desea eliminar el artículo: " + sDescripcion, "Validaciones",
                                                     MessageBoxButtons.OKCancel, MessageBoxIcon.Question);

                    if (r == DialogResult.OK)
                    {
                        if (dExistencia <=0)
                        {
                            var obj = new Articulo();
                        obj.iPK_Articulo = Convert.ToInt32(dgvArticulo.Rows[indiceFila].Cells[0].Value);
                        
                        var logica = new ArticuloL();
                        logica.ArticuloEliminar(obj);
                        CargaGridArticulo();
                        MessageBox.Show("El registro se ha eliminado guardado exitósamente", "Transacción", MessageBoxButtons.OK);
                        P_Limpiar();
                            
                        }
                        else
                        {
                             MessageBox.Show("No se puede eliminar el artículo, tiene existencias en bogega ", "Error", MessageBoxButtons.OKCancel);
                        }
                        
                        

                    }

                    #endregion
                }
            }
            catch (Exception exc)
            {

                MessageBox.Show("No se pudo eliminar el registro " + exc, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }


        #endregion

        #region Existencia Articulo
        private void cbBodega_SelectedIndexChanged(object sender, EventArgs e)
        {       if(flag)
                Carga_ExistenciaArticulos();
        }

        private void btnBuscarAsistente_Click_1(object sender, EventArgs e)
        {
            try
            {
                var pantalla = new Busca_Articulos_Activos(this);
                pantalla.ShowDialog();
            }
            catch (Exception exc)
            {
                MessageBox.Show("Se produjo un error al mostrar los datos" + exc, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        #endregion

        #region Metodos

        #region Articulos
       
        private void CargaGridArticulo()
        {
            try
            {
                var logica = new ArticuloL();

                List<Articulo> listaArticulo = logica.ArticulosConsultar();
                //Recorre la lista de Usuarios para asignar a cada celda del Datagrid
                //Los valores devueltos por la consulta
                dgvArticulo.Rows.Clear();
                for (int i = 0; i < listaArticulo.Count; i++)
                {
                    dgvArticulo.Rows.Add();
                    dgvArticulo.Rows[i].Cells[0].Value = listaArticulo[i].iPK_Articulo;
                    dgvArticulo.Rows[i].Cells[1].Value = listaArticulo[i].sArticuloNombre;
                    dgvArticulo.Rows[i].Cells[2].Value = listaArticulo[i].dArticuloCosto;
                    dgvArticulo.Rows[i].Cells[3].Value = listaArticulo[i].bArticuloEstado;
                    dgvArticulo.Rows[i].Cells[4].Value = listaArticulo[i].iFK_Linea_Articulo;
                    dgvArticulo.Rows[i].Cells[5].Value = listaArticulo[i].iFK_UMedida_Articulo;
                    dgvArticulo.Rows[i].Cells[6].Value = listaArticulo[i].dArticuloExistencia_Global;

                }

            }
            catch (Exception exc)
            {

                MessageBox.Show("Eror al cargar información " + exc, "Error", MessageBoxButtons.OKCancel);
            }
        }

        private void CargaComboUnidadesMedida()
        {
            try
            {
                var logica = new UnidadMedidaL();

                cbxUnidadMedida.DataSource = logica.LlenarComboUnidadMedida();
                cbxUnidadMedida.ValueMember = "PK_Unidad_Medida";
                cbxUnidadMedida.DisplayMember = "UMedida_Nombre";
            }
            catch (Exception exc)
            {

                MessageBox.Show("Eror al cargar información " + exc, "Error", MessageBoxButtons.OKCancel);
            }
        }

        private void CargaComboLineaArticulo()
        {
            try
            {
                var logica = new LineaArticuloL();

                cbxLineaArticulo.DataSource = logica.LlenarComboLineaArticulo();
                cbxLineaArticulo.ValueMember = "PK_Linea_Articulo";
                cbxLineaArticulo.DisplayMember = "LineaDescripcion";
            }
            catch (Exception exc)
            {

                MessageBox.Show("Eror al cargar información " + exc, "Error", MessageBoxButtons.OKCancel);
            }
        }


        #endregion

        #region existenciaArticulos
       
        public void CargaComboBodegas()
        {
            try
            {
                

                var logica = new BodegaL();

                cbBodega.DataSource = logica.LlenarComboBodega();
                cbBodega.ValueMember = "PK_Bodega";
                cbBodega.DisplayMember = "BodUbicacion";
                flag = true;
            }
            catch (Exception exc)
            {

                MessageBox.Show("Eror al cargar información " + exc, "Error", MessageBoxButtons.OKCancel);
            }
        }

        public void PresentaArticulo(int xPK_Articulo, string Nombre, decimal  Existencia)
        {
            txtCodArticulo.Text = xPK_Articulo.ToString(CultureInfo.InvariantCulture);
            txtNomArticulo.Text = Nombre.Trim();
            txtExitencia.Text = Existencia.ToString();
        }
       
        private void Carga_ExistenciaArticulos()
        {
            try
            {
               
                    var logica = new ExistenciaArticuloL();


                    List<ExistenciaArticulo> listaBodega =
                        logica.Existencia_ArticulConsultar(Convert.ToInt32(cbBodega.SelectedValue));
                    //Recorre la lista de Usuarios para asignar a cada celda del Datagrid
                    //Los valores devueltos por la consulta
                    dgExistencia.Rows.Clear();
                    for (int i = 0; i < listaBodega.Count; i++)
                    {
                        dgExistencia.Rows.Add();
                        dgExistencia.Rows[i].Cells[0].Value = listaBodega[i].iFK_Articulo_Existencia;
                        dgExistencia.Rows[i].Cells[1].Value = listaBodega[i].sArticuloNombre;
                        dgExistencia.Rows[i].Cells[2].Value = listaBodega[i].iFK_Bodega_Existencia;
                        dgExistencia.Rows[i].Cells[3].Value = listaBodega[i].sBodUbicacion;
                        dgExistencia.Rows[i].Cells[4].Value = listaBodega[i].dExistenciaCantidad;
                        dgExistencia.Rows[i].Cells[5].Value = listaBodega[i].iFK_Usuario;



                    }
                }
     
            catch (Exception exc)
            {

                MessageBox.Show("Eror al cargar información " + exc, "Error", MessageBoxButtons.OK);
            }

                
              

        }

      
        #endregion

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                if (dgExistencia.RowCount > 0)
                {
                    int indiceFila = dgExistencia.SelectedCells[0].RowIndex;
                    string sDescripcion = dgExistencia[1, indiceFila].Value.ToString();
                    decimal dExistencia = Convert.ToDecimal(dgExistencia[4, indiceFila].Value.ToString());

                    #region Elimina Articulo

                    DialogResult r = MessageBox.Show("Desea desasociar el artículo: " + sDescripcion, "Validaciones",
                                                     MessageBoxButtons.OK, MessageBoxIcon.Question);

                    if (r == DialogResult.OK)
                    {
                        if (dExistencia <= 0)
                        {
                            var obj = new ExistenciaArticulo();
                            obj.iFK_Articulo_Existencia = Convert.ToInt32(dgExistencia.Rows[indiceFila].Cells[0].Value);
                            obj.iFK_Bodega_Existencia = Convert.ToInt32(dgExistencia.Rows[indiceFila].Cells[2].Value);

                            var logica = new ExistenciaArticuloL();
                            logica.Existencia_ArticulEliminar(obj);
                            Carga_ExistenciaArticulos();
                            MessageBox.Show("Artículo desasociado", "Transacción", MessageBoxButtons.OK);
                            txtCodArticulo.Clear();
                            txtNomArticulo.Clear();
                            txtExitencia.Clear();


                        }
                        else
                        {
                            MessageBox.Show("No se puede eliminar el artículo, tiene existencias en bodega ", "Error", MessageBoxButtons.OKCancel);
                        }



                    }

                    #endregion
                }
         

            }
            catch (Exception exc)
            {

                MessageBox.Show("No se pudo eliminar el registro " + exc, "Error", MessageBoxButtons.OKCancel);
            }
        }
       
        #endregion

        private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                if (txtNomArticulo.Text != string.Empty)
                {
                    var obj = new ExistenciaArticulo();

                    obj.iFK_Articulo_Existencia = Convert.ToInt32(txtCodArticulo.Text);
                    obj.sArticuloNombre = txtNomArticulo.Text;
                    obj.iFK_Bodega_Existencia = Convert.ToInt32(cbBodega.SelectedValue);
                    obj.iFK_Usuario = VariableGlobales.iCodigoUsuario;

                    var logica = new ExistenciaArticuloL();

                    logica.Existencia_ArticuloGuardar(obj);

                    Carga_ExistenciaArticulos();
                    MessageBox.Show("El registro se guardo exitosamente", "Transacción", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    txtCodArticulo.Clear();
                    txtNomArticulo.Clear();
                    txtExitencia.Clear(); 
                }
                else
                {
                    MessageBox.Show("Seleccione un artículo a asociar", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }

               



            }
            catch (Exception exc)
            {
                MessageBox.Show("Se produjo un error al guardar los datos" + exc, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void dgExistencia_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
           
        }

        private void dgExistencia_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            int indicefila = dgExistencia.SelectedCells[0].RowIndex;
            txtCodArticulo.Text = dgExistencia.Rows[indicefila].Cells[0].Value.ToString();
            txtNomArticulo.Text = dgExistencia.Rows[indicefila].Cells[1].Value.ToString();
            txtExitencia.Text = dgExistencia.Rows[indicefila].Cells[4].Value.ToString();
            cbBodega.SelectedValue = dgExistencia[2, indicefila].Value.ToString();
            txtCodArticulo.Focus();
        }

        private void btnHome_Click(object sender, EventArgs e)
        {
            this.WindowState = FormWindowState.Minimized;
        }

        private void txtNomArticulo_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                button2_Click(sender, e);
            }
        }

       
     
    

      

  

    


       

    

    }
}
